C言語 ビット演算
table:ビット演算子
| 論理和(OR) a = b | 0x0f0f0f0f
& 論理積(AND) a = b & 0xffffffff
^ 排他的論理話(XOR) a = b ^ 0x0f0f0f0f
~ 反転(NOT) a = ~b
<< 左シフト a = b << 2
> 右シフト a = b >> 2
論理和(OR)
特定ビットを立てる
code:memo.c
#include <stdio.h>
int main() {
// 01001001
unsigned char num1 = 0x49;
// 01001001
// OR
// 10010010
num1 = num1 | 0x92
// → 11011011
printf("0x%x", num1);
}
論理積(AND)
特定ビットを落とす
code:memo.c
#include <stdio.h>
int main() {
// 11011011
unsigned char num = 0xDB;
// 01101101
// AND
// 11011011
num = num | 0x6D
// → 01001001 (0x49)
printf("0x%x", num);
}
排他的論理話(XOR)
反転(NOT)
左シフト
右シフト
安全なビット演算をする場合の参考
INT34-C. 負のビット数のシフトやオペランドのビット数以上のシフトを行わない
一時変数を使わずに使ってスワップする
確認用
Q. C言語 ビット操作
参考
C言語 ビット演算【扱うための視点と実践的な使用例を図解】
論理演算とビット操作 コンピュータシステム 第6回講義
関連
論理演算
セキュアコーディング
調査用
/pogi-log/Google.icon C言語 ビット操作
#ビット演算 #C/C++
#Fleeting_Notes